package com.linzelin.www.util;

import com.linzelin.www.po.Activity;
import com.linzelin.www.po.Charger;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Scanner;

//负责人方法类
public class AccountCharger {
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    //先获取一波连接池
    //负责人的一个登录判断函数
    public int login(String username,String password) {
        /*用于判断账户的登录情况的一个方法
        没有账号或是输入有误就返回 0
        有账号并且审核通过的在输入正确密码后防护 1
        有账号在审核的返回 2*/
        if (username == null || password == null) {
            return 0;
        }
        String sql = "select * from charger where status = '审核通过' ";
        //获取表中符合条件的账号
        List<Charger> list = template.query(sql,new BeanPropertyRowMapper<Charger>(Charger.class));
        for (Charger c : list) {
            if(c.getUsename().equals(username))
            {
                //先选出有的账号
                while(!(c.getPassword().equals(password)))
                {
                    //强制要求输入正确密码
                    System.out.println("密码有误,重新输入");
                    password = new Scanner(System.in).next();
                }
                return 1;
                //登录成功返回1
            }
        }
        sql = "select * from charger where status = '待审核'";
        //如果上面的函数的判断都不符合的话,就筛选下这个账号是不是在审核中
        list = template.query(sql,new BeanPropertyRowMapper<Charger>(Charger.class));
        for (Charger c : list) {
            if(c.getUsename().equals(username))
            {
                return 2;
                //在审核中就返回2
            }
        }
        return 0;
        //这里使用int类型的数据来区分,0代表没有这个号,1代表有这个号并且密码输入正确,2代表这个账号正在审核中
    }

    public void Land(Charger charger) throws Exception {
        /*Properties prop_find = new Properties();
        prop_find.load(new FileReader("C:\\Users\\啦啦啦\\Desktop\\Charger.txt"));
        Set<String> set = prop_find.stringPropertyNames();*/
        int flag = login(charger.getUsename(),charger.getPassword());
        //调用登录判断函数看看返回的是什么
        if(flag==2) {
            System.out.println("------------------");
            System.out.println("您的账号正在审核中,请联系管理员");
            System.out.println("------------------");
        }
        else
        {
            while(0==flag)
            {
                System.out.println("------------------");
                System.out.println("输入的账号或密码有误,请重新输入");
                System.out.println("账号:");
                charger.setUsename(new Scanner(System.in).next());
                System.out.println("密码:");
                charger.setPassword(new Scanner(System.in).next());
                flag = login(charger.getUsename(),charger.getPassword());
                //重新要求用户输入账号和密码
            }
            if(flag == 2)
            {
                System.out.println("这个账号正在审核中,请联系管理员");
                //让用户联系管理员审核账号
            }
            else {
                System.out.println("登录成功");
                Operation(charger);
                //登录成功,跳转到负责人界面
            }
        }
        /*while(true)
        {
            for (String s : set) {
                if(s.equals(charger.getName()))
                {
                    if(prop_find.get(s).equals(charger.getCipher()))
                    {
                        System.out.println("正在登入\n=================");
                        Thread.sleep(2000);
                        return;
                    }
                    else
                    {
                        String code;
                        while (!(prop_find.get(s).equals(code = new Scanner(System.in).next()))){
                            System.out.println("密码错误，请重新输入密码");
                        }
                        charger.setCipher(code);
                        System.out.println("正在登入\n=================");
                        Thread.sleep(2000);
                        return;
                    }
                }
            }
            System.out.println("无效账号，请重新登录");
            System.out.println("账号");
            charger.setName(new Scanner(System.in).next());
            System.out.println("密码");
            charger.setCipher(new Scanner(System.in).next());
        }*/
    }
    //负责人注册函数
    public void Logon(Charger charger) throws Exception{
        /*prop.setProperty(charger.getName(),charger.getCipher());
        FileWriter fw = new FileWriter("C:\\Users\\啦啦啦\\Desktop\\Charger.txt",true);
        prop.store(fw,"新管理员");*/
        System.out.println("------------------");
        System.out.println("请输入联系方式");
        charger.setContact(new Scanner(System.in).next());
        System.out.println("请选择您的社团");
        AccountAssociation.DisplayAssociation();
        System.out.println("------------------");
        //这里展示一下已有的社团,让用户挑选
        System.out.println("请输入您的社团id");
        charger.setAssociation_id(new Scanner(System.in).nextInt());
        //将社团id保存到负责人对象中
        String sql ="insert into charger values (null,?,?,?,'待审核',?)";
        template.update(sql,charger.getUsename(),charger.getPassword(),charger.getContact(),charger.getAssociation_id());
        //输入数据到sql表格中,备注   待审核
        System.out.println("正在注册");
        System.out.println("------------------");
        Thread.sleep(2000);
        //一丢丢延迟代表真的在注册
        System.out.println("注册成功");
        System.out.println("请等待管理员,通过账号申请");
    }

    //负责人选择界面
    public void Operation(Charger charger)  {
        boolean flag = true;
        //因为负责人有多段操作,所以选择flag来循环
        while(flag)
        {
            System.out.println("------------------");
            System.out.println("请选择服务:\n1.添加活动\n2.审核学生报名\n3.结束活动\n4.撤销申请\n5.退出");
            System.out.println("------------------");
            int select = new Scanner(System.in).nextInt();
            switch(select)
            {
                case 1:
                    System.out.println("------------------");
                    System.out.println("请输入活动名称");
                    new AccountActivity().ActivityAdd(new Activity(new Scanner(System.in).next()));
                    break;
                case 2:new AccountActivity().ExamineEnroll();break;
                case 3:new AccountActivity().EndAcitivty();break;
                case 5:flag = false;break;
                case 4:new AccountActivity().ActivityBack();break;
                default:Operation(charger);break;
            }
        }
    }

    //负责人审核函数,由管理员函数调用
    public void ChargerEnroll(String Uname)
    {
        if (Uname == null) {
            System.out.println("------------------");
            System.out.println("输入有误");
        }
        String sql = "select * from charger";
        List<Charger> list = template.query(sql,new BeanPropertyRowMapper<Charger>(Charger.class));
        int count = 0;
        //一个用于判断是不是修改成功的变量
        for (Charger c : list) {
            if(c.getUsename().equals(Uname))
            {
                System.out.println("------------------");
                System.out.println("请选择是否通过该账号");
                System.out.println("1.通过  2.不通过");
                switch(new Scanner(System.in).nextInt())
                {
                    case 1:
                        c.setStatus("审核通过");
                        sql = "update charger set status = ? where usename = ?";
                        count = template.update(sql,c.getStatus(),Uname);
                        break;
                    case 2:
                        c.setStatus("审核不通过");
                        sql = "delete from charger where usename = ?";
                        count = template.update(sql,Uname);
                        break;
                }
                if(count>0)
                {
                    System.out.println("------------------");
                    System.out.println("修改成功");
                }
                else
                {
                    System.out.println("------------------");
                    System.out.println("修改失败");
                }
                return ;
                //修改成功直接退出
            }
        }
        System.out.println("------------------");
        //没找到账号让用户进行重新选择操作
        System.out.println("未找到账号,请选择输入remove重新寻找或输入任意内容退出");
        if(new Scanner(System.in).next().equals("remove"))
        {
            System.out.println("请重新输入账号名称");
            ChargerEnroll(new Scanner(System.in).next());
        }
    }
}
